using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 攻击状态类，处理敌人在攻击状态下的行为
/// </summary>
public class AttackState : IState
{
    private Enemy enemy; // 当前的敌人对象

    /// <summary>
    /// 构造函数，初始化敌人对象
    /// </summary>
    /// <param name="enemy">当前的敌人对象</param>
    public AttackState(Enemy enemy)
    {
        this.enemy = enemy;
    }

    /// <summary>
    /// 当进入攻击状态时调用，播放攻击动画
    /// </summary>
    public void OnEnter()
    {
        enemy.parameters.enemyAnimator.Play("Attack");
        enemy.SetMoveSpeed(0);
    }

    /// <summary>
    /// 固定更新方法，目前未实现
    /// </summary>
    public void OnFixedUpdate()
    {
        throw new System.NotImplementedException();
    }

    /// <summary>
    /// 每帧更新方法，判断是否需要切换状态
    /// </summary>
    public void OnUpdate()
    {
        if (!enemy.target) return; // 判断追击目标是否为空
        float distance = Vector2.Distance(enemy.transform.position, enemy.target.position); // 计算敌人与玩家的距离

        if (distance > enemy.parameters.enemyAttackDistance)
        {
            // 如果玩家不在攻击范围内，切换到追击状态
            enemy.TransitionState(StateType.Chase);
            OnExit();
        }
        else if (enemy.parameters.enemyAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
        {
            // 攻击动画结束后进入冷却状态
            enemy.TransitionState(StateType.Cooldown);
            OnExit();
        }
    }

    /// <summary>
    /// 当退出攻击状态时调用，重置攻击动画为Idle
    /// </summary>
    public void OnExit()
    {
        
        enemy.SetMoveSpeed(enemy.parameters.enemyMoveSpeed);
    }
}